package com.liu.email;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class MyMimeMessageEmail2 {
	public static void main(String[] args) throws Exception {
		sendMimeMessageEmail();
		// 属性对象
		Properties properties = new Properties();
		// 开启debug调试 ，打印信息
		properties.setProperty("mail.debug", "true");
		// 发送服务器需要身份验证
		properties.setProperty("mail.smtp.auth", "true");
		// 发送服务器端口
		properties.setProperty("mail.smtp.port", "25");
		// 发送邮件协议名称
		properties.setProperty("mail.transport.protocol", "smtp");
		// 设置邮件服务器主机名
		properties.setProperty("mail.host", "smtp.qq.com");
		// 环境信息
		Session session = Session.getInstance(properties, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// 在session中设置账户信息，Transport发送邮件时会使用
				return new PasswordAuthentication("1299616634@qq.com", "kiwjgnnajkcjhdja");
			}
		});

		// 读取本地邮件
		Message message = new MimeMessage(session, new FileInputStream(new File("C:/Users/ydxx/Desktop/demo.eml")));

		// 设置收件人地址发送邮件
		Transport.send(message, InternetAddress.parse("liubo20180827@cnsunet.com"));
	}

	/**
	 * 1：标题及接发人中文需要处理
	 * 
	 * @param info
	 * @throws Exception
	 */
	public static void sendMimeMessageEmail() throws Exception {
		// 环境
		Session session = Session.getDefaultInstance(new Properties());
		// 邮件
		MimeMessage msg = new MimeMessage(session);

		// 主题
		msg.setSubject("主题");
		// 发件人
		msg.setFrom(new InternetAddress("1299616634@qq.com"));

		// 整封邮件的MINE消息体 mixed带附件 related 正文 alternative 纯文本
		MimeMultipart msgMultipart = new MimeMultipart("mixed");
		// 设置邮件的MINE消息体
		msg.setContent(msgMultipart);

		/**
		 * 正文
		 */
		MimeBodyPart content = new MimeBodyPart();
		// 把正文，附件加入到 MINE消息体中
		msgMultipart.addBodyPart(content);
		// 正文（图片和文字部分）
		MimeMultipart bodyMultipart = new MimeMultipart("related");
		// 设置内容为正文
		content.setContent(bodyMultipart);
		// html代码部分
		MimeBodyPart htmlPart = new MimeBodyPart();
		// 正文添加图片和html代码
		bodyMultipart.addBodyPart(htmlPart);
		String textPart = "正文";
		// html代码
		htmlPart.setContent("<span style='color:red'>" + textPart + "</span>" ,
				"text/html;charset=utf-8");

		/**
		 * 附件
		 */
		MimeBodyPart attch = new MimeBodyPart();
		msgMultipart.addBodyPart(attch);
		// 把文件，添加到附件中
		// 数据源
		DataSource ds1 = new FileDataSource(new File("C:/Users/ydxx/Desktop/工作周报20191223.xls"));
		// 数据处理器
		DataHandler dh1 = new DataHandler(ds1);
		// 设置附件的数据
		attch.setDataHandler(dh1);
		// 设置附件的文件名
		attch.setFileName(MimeUtility.encodeText("设置附件的文件名") + ".xls");

		// 生成文件邮件
		msg.saveChanges();

		// 输出
		OutputStream os = new FileOutputStream("C:/Users/ydxx/Desktop/demo.eml");
		msg.writeTo(os);
		os.close();
	}
}
